package com.qinggeng.project.system.service;

import com.qinggeng.project.api.dto.GoodsGiftDto;
import com.qinggeng.project.system.domain.Goods;
import com.qinggeng.project.system.domain.GoodsGift;
import com.qinggeng.project.system.domain.UserWishGift;
import com.qinggeng.project.system.domain.json.GiftConfig;
import com.qinggeng.project.system.domain.json.GoodsGiftId;

import java.util.List;

/**
 * 商品赠品Service接口
 *
 * @author qinggeng
 * @date 2020-07-16
 */
public interface IGoodsGiftService
{
    /**
     * 查询商品赠品
     *
     * @param giftId 商品赠品ID
     * @return 商品赠品
     */
    public GoodsGift selectGoodsGiftById(Long giftId);

    /**
     * 获取第N次抽奖时的奖品
     * @return
     */
    List<GoodsGift> selectGoodsGiftList(UserWishGift userWishGift);

    /**
     * 查询商品赠品列表
     *
     * @param goodsGift 商品赠品
     * @return 商品赠品集合
     */
    public List<GoodsGift> selectGoodsGiftList(GoodsGift goodsGift);

    /**
     * 查询商品赠品列表
     *
     * @param goodsGift 商品赠品
     * @return 商品赠品集合
     */
    List<GoodsGiftDto> selectGoodsGiftDtoList(GoodsGift goodsGift);

    /**
     * 新增商品赠品
     *
     * @param goodsGift 商品赠品
     * @return 结果
     */
    public int insertGoodsGift(GoodsGift goodsGift);

    /**
     * 修改商品赠品
     *
     * @param goodsGift 商品赠品
     * @return 结果
     */
    public int updateGoodsGift(GoodsGift goodsGift);

    /**
     * 批量删除商品赠品
     *
     * @param giftIds 需要删除的商品赠品ID
     * @return 结果
     */
    public int deleteGoodsGiftByIds(Long[] giftIds);

    /**
     * 删除商品赠品信息
     *
     * @param giftId 商品赠品ID
     * @return 结果
     */
    public int deleteGoodsGiftById(Long giftId);

    /**
     * 根据商品价格计算好友助力奖品中奖率并添加到奖品集合中
     * @param
     * @return
     */
    List<GoodsGift> selectGoodsGiftList(Double groupPrice);

    /**
     * 获取免单、半价和其他随机小奖品的ID
     * @return
     */
    GoodsGiftId getGoodsGiftId();

    Long getLoseGiftId();

    Long getFreeGiftId();

    Long getHalfGiftId();

    Long getOtherGiftId();

    Long getOtherGiftId(String configKey);

    GiftConfig getGiftConfig(String configKey);


    List<GoodsGift> addGoodsGiftList(GoodsGift goodsGift,Long otherGiftId);


    /**
     * 修改商品赠品
     *
     * @param goodsGift 商品赠品
     * @return 结果
     */
    int updateGoodsGiftNum(GoodsGift goodsGift);

    /**
     * 查询奖品库存
     * @param goodsGiftId
     * @return
     */
    boolean checkGoodsGiftNum(Long goodsGiftId);

    GoodsGift getGoodsGiftIdByRandom(Long[] giftIds);
}
